//----------------------------------------------------------------------------
//  ,-.
// /_\___ ,   Ninja Framework
// '  ___\    (C) Riccardo Capra - http://riccar.do
//  //   \\
//----------------------------------------------------------------------------
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//----------------------------------------------------------------------------

#ifndef NJ_DEBUG_SYSTEM_LINUX_H
#	define NJ_DEBUG_SYSTEM_LINUX_H

#	include "NjExample01.h"

#	if defined(NJ_PLATFORM_LINUX_X86) || defined(NJ_PLATFORM_LINUX_X86_64)
	/// \brief The default Linux implementation for NjDebugSystem
	class NjDebugSystemLinux : public NjDebugSystem::Implementation
	{
	public:
		NJ_TRIVIAL_DEFAULT_CONSTRUCTOR(NjDebugSystemLinux);
		NJ_TRIVIAL_VIRTUAL_DESTRUCTOR(NjDebugSystemLinux);

	protected:
		/// \brief Triggers an hardware breakpoint
		/// \return Always NJ_TRUE
		virtual NjBool TriggerBreakPoint();

		/// \brief Checks if the debugger is attached
		///
		/// Not implemented
		/// \return NJ_FALSE
		virtual NjBool IsDebuggerAttached();

		/// \brief Writes on the debug console
		///
		/// Not implemented
		/// \return NJ_FALSE
		virtual NjBool WriteToDebugConsole(NjChar const * szText);

	private:

		NJ_DISABLE_COPY(NjDebugSystemLinux);
	};

	/// \brief Default platform specific implementation of NjDebugSystem
	typedef NjDebugSystemLinux NjDebugSystemPlatform;
#	endif // defined(NJ_PLATFORM_LINUX_X86) || defined(NJ_PLATFORM_LINUX_X86_64)

#endif // NJ_DEBUG_SYSTEM_LINUX_H
